#ifndef			__LINK_1_H__
#define			__LINK_1_H__
typedef struct node {
	int val;		//用来记录数字的成员变量
	struct node *p_prev;	//用来指向前一个节点的成员变量
	struct node *p_next;	//用来指向下一个节点的成员变量
}node;

typedef struct {
	node head;	//头结点
	node tail;	//尾节点
	node *p_cur	;//《记录遍历过程中上一次操作的节点》
}link;

//链表初始化函数
void link_init(link *);

//链表清理函数
void link_deinit(link *);

//获得数字个数的函数
int link_size(const link *);

//判断链表是否空的函数
int link_empty(const link *);

//在链表最前面插入数字的函数
int link_add_head(link *, int);

//在链表末尾插入新数字的函数
int link_append(link *, int);

//按照从小到大的顺序在链表中间插入新数字的函数
int link_insert(link *, int);

//删除最前面数字的函数
int link_remove_head(link *);

//删除最后一个有效数字的函数
int link_remove_tail(link *);

//删除链表中间某个数字的函数
int link_remove(link *, int);

//获得最前面数字的函数
int link_get_head(const link *, int *);

//获得链表里最后一个数字的函数
int link_get_tail(const link *, int *);

//根据编号获得数字的函数
int link_get(const link *, int *, int);

//《开始从前向后遍历的函数》
void link_begin(link *);

//《在从前向后遍历过程中获得下一个数字的函数》
int link_next(link *, int *);

//《开始从后向前遍历的函数》
void link_rbegin(link *);

//《在从后向前遍历过程中获得前一个数字的函数》
int link_prev(link *, int *);
#endif			//__LINK_1_H__
